package com.breeze.blockchain.controller.admin;

import com.breeze.blockchain.controller.admin.form.role.RolePageForm;
import com.breeze.blockchain.mybatis.entity.RoleDo;
import com.breeze.blockchain.service.RoleService;
import com.breeze.components.web.core.ResponseDTO;
import com.mybatisflex.core.paginate.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 角色 控制层。
 *
 * @author breeze
 * @since 2024-05-11 23:21:51
 */
@RestController
@Tag(name = "角色接口")
@RequestMapping("api/admin/role")
public class RoleController {

  @Resource private RoleService roleService;

  /**
   * 添加角色。
   *
   * @param roleDo 角色
   */
  @PostMapping("save")
  @Operation(summary = "保存角色")
  public ResponseDTO<Void> save(@RequestBody @Parameter(name = "角色") RoleDo roleDo) {
    roleService.save(roleDo);
    return ResponseDTO.ok();
  }

  /**
   * 根据主键删除角色。
   *
   * @param id 主键
   */
  @GetMapping("remove")
  @Operation(summary = "根据主键角色")
  public ResponseDTO<Void> remove(@RequestParam @Parameter(name = "角色主键") Long id) {
    roleService.removeById(id);
    return ResponseDTO.ok();
  }

  /**
   * 根据主键更新角色。
   *
   * @param roleDo 角色
   */
  @PostMapping("update")
  @Operation(summary = "根据主键更新角色")
  public ResponseDTO<Void> update(@RequestBody @Parameter(name = "角色主键") RoleDo roleDo) {
    roleService.updateById(roleDo);
    return ResponseDTO.ok();
  }

  /**
   * 根据角色主键获取详细信息。
   *
   * @param id 角色主键
   * @return 角色详情
   */
  @GetMapping("detail")
  @Operation(summary = "根据主键获取角色")
  public ResponseDTO<RoleDo> detail(@RequestParam Long id) {
    return ResponseDTO.ok(roleService.getById(id));
  }

  /**
   * 分页查询角色。
   *
   * @param from 分页对象
   * @return 分页对象
   */
  @PostMapping("page")
  @Operation(summary = "分页查询角色")
  public ResponseDTO<Page<RoleDo>> page(@RequestBody @Parameter(name = "分页信息") RolePageForm from) {
    return ResponseDTO.ok(roleService.page(from.toPage(), from.toQueryWrapper()));
  }
}
